<?php
namespace common\library\wechat\payment;

use common\component\wechat\Wechat;
use common\library\wechat\WechatApi;

/*
  [EWEISHOP] Copyright(C) 2017 Elinkint Inc.
  This is NOT a freeware, use is subject to license terms
   
  PaymentOrder.php 2018-05-24 18:13 cunx $
   
*/

/**
 * 微信支付订单
 * Class PaymentOrder
 * @package common\library\wechat\payment
 */
class PaymentOrder extends WechatApi
{
    /**
     * 当前实例类型
     * @var string
     */
    static $apiType = 'payment';
    static $paymentId = 0;

    /**
     * 微信支付统一下单
     * @param $params       微信支付参数
     * --------------------------------------------------------------------------------
     * @description appid, mch_id, nonce_str, sign, sign_type 参数可不用传入
     * @description 其他参数与微信支付统一下单接口参数一致
     *---------------------------------------------------------------------------------
     * @param[openid]       用户标识    trade_type=JSAPI时（即公众号支付），此参数必传，此参数为微信用户在商户对应appid下的唯一标识。
     * @param[out_trade_no] 商户单号    商户系统内部订单号，要求32个字符内，只能是数字、大小写字母_-|* 且在同一个商户号下唯一。
     * @param[total_fee]    标价金额    订单总金额，单位为分
     * @param[trade_type]   交易类型    JSAPI：公众号支付/NATIVE：扫码支付/APP：APP支付
     * @param[notify_url]   通知地址    异步接收微信支付结果通知的回调地址，通知url必须为外网可访问的url，不能携带参数。
     * @param[body]         商品描述    商品简单描述
     * @param[product_id]   商品ID     trade_type=NATIVE时（即扫码支付），此参数必传。此参数为二维码中包含的商品ID，商户自行定义。
     * @param[spbill_create_ip]   终端IP     APP和网页支付提交用户端ip，Native支付填调用微信支付API的机器IP。
     * @param[...]          其他参数
     * --------------------------------------------------------------------------------
     * @link https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1       公众号支付统一下单
     * @link https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1      扫码支付统一下单
     * @link https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_10   刷卡支付统一下单
     * @link https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1 小程序支付统一下单
     * @link https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20         H5支付统一下单
     * @link https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1     App支付统一下单
     * ---------------------------------------------------------------------------------
     * @return array|bool|void
     * @author cunx
     */
    public static function unify(array $params){
        try{
            $result = self::getInstance()->order->unify($params);
        }catch(\Exception $result){}
        return Wechat::apiError($result);
    }

    /**
     * 通过商户单号查询订单
     * @param string $outTradeNo    商户单号
     * @return array|bool|void
     * @author cunx
     */
    public static function queryByOutTradeNumber(string $outTradeNo){
        try{
            $result = self::getInstance()->order->queryByOutTradeNumber($outTradeNo);
        }catch(\Exception $result){}
        return Wechat::apiError($result);
    }

    /**
     * 通过微信支付单号查询订单
     * @param $transactionId    微信支付单号
     * @return array|bool|void
     * @author cunx
     */
    public static function queryByTransactionId(string $transactionId){
        try{
            $result = self::getInstance()->order->queryByTransactionId($transactionId);
        }catch(\Exception $result){}
        return Wechat::apiError($result);
    }

    /**
     * 关闭订单
     * @param $outTradeNo   商户订单号
     * @return array|bool|void
     * @author cunx
     */
    public static function close(string $outTradeNo){
        try{
            $result = self::getInstance()->order->close($outTradeNo);
        }catch(\Exception $result){}
        return Wechat::apiError($result);
    }
}